Motivation

https://research.stlouisfed.org/publications/economic-synopses/2013/08/13/mind-the-regional-output-gap/

trying URL 'http://www2.census.gov/geo/tiger/TIGER2017/STATE/tl_2017_us_state.zip'
Content type 'application/zip' length 9284383 bytes (8.9 MB)
==================================================
downloaded 8.9 MB

number of columns of result is not a multiple of vector length (arg 1)3 parsing failures.
row # A tibble: 3 x 5 col     row   col   expected    actual             file expected   <int> <chr>      <chr>     <chr>            <chr> actual 1  1441  <NA> 57 columns 1 columns 'QGSP_ALL_R.csv' file 2  1442  <NA> 57 columns 2 columns 'QGSP_ALL_R.csv' row 3  1443  <NA> 57 columns 1 columns 'QGSP_ALL_R.csv'
# plot the shapes to ensure we have them
leaflet(states) %>%
  addTiles() %>%
  addPolygons() %>%
  setMapWidgetStyle()
sf_NPR1to1 <- mutate(sf_NPR1to1, FID = as.integer(FID))
sf_USGDP <- dplyr::left_join(sf_NPR1to1, mutate(state_gdp, by = c("FID"="id")))
Error: `by` required, because the data sources have no common variables
# plotting
# ggplot(gdpDF, aes(long,lat, group=id, fill= '2016Q1')) + geom_polygon()
ggplot(state_gdp, aes(map_id=id,fill='2016Q1')) +
  geom_map(map=state_map, color='#ffffff', size=0.1) +
  expand_limits(x=state_map$long,y=state_map$lat) +
  theme_map()

qpal <- colorBin("Blues", domain = sf_USGDP$'2016Q1', bins = 8)
labels <- sprintf(
  "<strong>%s</strong><br/>%g dollars",
  sf_USGDP$state, sf_USGDP$'2016Q1'
) %>% lapply(htmltools::HTML)
leaflet(
  sf_USGDP,
  options= getLeafletOptions(-1.5, -1.5)) %>%
  addPolygons(
    weight=2,
    fillColor= ~qpal('2016Q1'),
    group = 'states',
    fillOpacity = 0.6, opacity = 1, color="#666666",
    highlightOptions = highlightOptions(weight = 4),
    label = labels,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "3px 8px"),
      textsize = "15px",
      direction = "auto")) %>%
  addLegend(pal = qpal, values = ~'2016Q1', opacity = 0.7, title = NULL,
    position = "bottomright")%>%
  addLabelOnlyMarkers(
    data=sf_USGDP.centers,
    label = ~as.character(state),
    labelOptions = labelOptions(
    noHide = 'T', textOnly = T,
    offset=c(-4,-10), textsize = '12px')) %>%
  setMapWidgetStyle()
Error in cut.default(x, binsToUse, labels = FALSE, include.lowest = TRUE,  : 
  'x' must be numeric
ggplot(state_map) +
  geom_sf(aes()) +
  scale_fill_viridis() +
  ggtitle("Area of States")

EXAMPLES

# From http://leafletjs.com/examples/choropleth/us-states.js
qpal <- colorQuantile("Blues", domain = state_gdp$'2016Q1', n = 7)
leaflet(states) %>%
  setView(-96, 37.8, 4) %>%
  addPolygons(
    color = ~qpal('2016Q1'),
    opacity = 1,
    dashArray = "3",
    fillOpacity = 0.7,
    smoothFactor = 0.2,
    highlight = highlightOptions(
      weight = 5,
      color = "#666",
      dashArray = "",
      fillOpacity = 0.7,
      bringToFront = TRUE),
    label = labels,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "3px 8px"),
      textsize = "15px",
      direction = "auto")) %>%
  addLegend(pal = qpal, values = ~'2016Q1', opacity = 0.7, title = NULL,
    position = "bottomright")
Error in cut.default(x, binsToUse, labels = FALSE, include.lowest = TRUE,  : 
  'x' must be numeric
leaflet(
  sf_NPR1to1,
  options= getLeafletOptions(-1.5, -1.5)) %>%
  addPolygons(
    weight=2,color='#000000', group = 'states',
    fillOpacity = 0.6, opacity = 1, fillColor= ~getFactorPal(state)(state),
    highlightOptions = highlightOptions(weight = 4)) %>%
  addLabelOnlyMarkers(
    data=sf_NPR1to1.centers,
    label = ~as.character(state),
    labelOptions = labelOptions(
    noHide = 'T', textOnly = T,
    offset=c(-4,-10), textsize = '12px')) %>%
  setMapWidgetStyle()
LS0tCnRpdGxlOiAiU3BhdGlhbCBWaXN1YWxpemF0aW9uIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KU3lzLnNldGVudihUWj0iQW1lcmljYS9DaGljYWdvIikKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkobHVicmlkYXRlKQpsaWJyYXJ5KHRpZ3JpcykKbGlicmFyeShnZ3RoZW1lcykKIyBsaWJyYXJ5KGdlb2pzb25pbykKIyBsaWJyYXJ5KGdnbWFwKQojIGxpYnJhcnkobWFwdG9vbHMpCiMgIyBsaWJyYXJ5KHJnZW9zKQojICMgbGlicmFyeShyZ2RhbCkKIyBsaWJyYXJ5KHNmKQojIGxpYnJhcnkodmlyaWRpcykKIyBsaWJyYXJ5KHJ2ZXN0KQoKbGlicmFyeSh0aWxlZ3JhbXNSKQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMobGlicmFyeSh0aWxlZ3JhbXNSKSkKbGlicmFyeShsZWFmbGV0KQpsaWJyYXJ5KGxlYWZsZXQuZXh0cmFzKQpsaWJyYXJ5KGNvbG9ybWFwKQoKIyMgZXhhbXBsZSBzY2FsZV9jb2xvcl9jb2xvcm1hcCgnY29sX25hbWUnLCBkaXNjcmV0ZSA9IFQsIGNvbG9ybWFwID0gY29sb3JtYXBzJHZpcmlkaXMsIHJldmVyc2UgPSBUKQoKI2ltcG9ydCBhIGN1c3RvbSB0aGVtZQpzb3VyY2UoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tZHZhbmRlcmdvbi9kYXRhLXZpei9tYXN0ZXIvY3VzdG9tX3RoZW1lLlIiKQpwYWxsZXRlPC0gYygiIzQ4NEVGNCIsICIjMTkyMkZGIiwgICIjMDAwOUZGIiwJIiNCMjkwMDAiLCAJIiNGRkNEMDAiKQpwYWxsZXRlMiA8LSBjKCIjNDg3MEY0IiwgIiMzRDUzOTkiLCAgIiMwMEMyRkYiLAkiI0ZGODQ0MCIsIAkiI0NDMzkxMiIpCgojIExlYWZsZXQgT3B0aW9ucwpnZXRMZWFmbGV0T3B0aW9ucyA8LSBmdW5jdGlvbihtaW5ab29tLCBtYXhab29tLCAuLi4pIHsKICBsZWFmbGV0T3B0aW9ucygKICAgIGNycyA9IGxlYWZsZXRDUlMoIkwuQ1JTLlNpbXBsZSIpLAogICAgbWluWm9vbSA9IG1pblpvb20sIG1heFpvb20gPSBtYXhab29tLAogICAgZHJhZ2dpbmcgPSBGQUxTRSwgem9vbUNvbnRyb2wgPSBGQUxTRSwKICAgIHRhcCA9IEZBTFNFLAogICAgYXR0cmlidXRpb25Db250cm9sID0gRkFMU0UgLCAuLi4pCn0KCiNGYWN0b3IgUGFsbGV0ZXMgZnJvbSBDb2xvcm1hcAojIGdldEZhY3RvclBhbCA8LSBmdW5jdGlvbihmKSB7CiMgICBjb2xvckZhY3Rvcihjb2xvcm1hcDo6Y29sb3JtYXAoCiMgICAgIGNvbG9ybWFwID0gY29sb3JtYXA6OmNvbG9ybWFwcyRoc3YsCiMgICAgIG5zaGFkZXMgPSBsZW5ndGgoZikpLCBmKQojIH0KCmdldEZhY3RvclBhbCA8LSBmdW5jdGlvbihmKSB7CiAgY29sb3JGYWN0b3IoY29sb3JtYXBzJHZpcmlkaXMsIGYpCn0KCmBgYAoKIyMgTW90aXZhdGlvbgpodHRwczovL3Jlc2VhcmNoLnN0bG91aXNmZWQub3JnL3B1YmxpY2F0aW9ucy9lY29ub21pYy1zeW5vcHNlcy8yMDEzLzA4LzEzL21pbmQtdGhlLXJlZ2lvbmFsLW91dHB1dC1nYXAvCgoKYGBgIHtyIGxvYWRpbmdfZGF0YSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KCiMgdXNfZ2RwIDwtIGdlb2pzb25pbzo6Z2VvanNvbl9yZWFkKCJnZHAudG9wby5qc29uIiwgd2hhdCA9ICJzcCIpCgojIFJlYWQgY29tYmluZWQgc3RhdGlzdGljYWwgYXJlYXM6IGh0dHBzOi8vd3d3LmNlbnN1cy5nb3YvZ2VvL21hcHMtZGF0YS9kYXRhL2NiZi9jYmZfbXNhLmh0bWwKIyBjYnNhIDwtIGNvbWJpbmVkX3N0YXRpc3RpY2FsX2FyZWFzKGNiID0gRkFMU0UsIHJlc29sdXRpb24gPSAiNW0iLCB5ZWFyID0gMjAxNykKCiMgc3RhdGVzIHNoYXBlZmlsZQpzdGF0ZXMgPC0gc3RhdGVzKGNiID0gRkFMU0UsIHJlc29sdXRpb24gPSAiNW0iLCB5ZWFyID0gMjAxNykKCiMgc3RhdGUgZ2RwIChCdXJlYXUgb2YgRWNvbm9taWMgQWR2aXNvcnM6IGh0dHBzOi8vd3d3LmJlYS5nb3YvcmVnaW9uYWwvZG93bmxvYWR6aXAuY2ZtKQpzdGF0ZV9nZHAgPC0gcmVhZF9jc3YoJ1FHU1BfQUxMX1IuY3N2JykgJT4lIAogICAgICAgICAgICAgICAgZmlsdGVyKEluZHVzdHJ5SWQgPT0gMSkgJT4lCiAgICAgICAgICAgICAgICAjIGdldHRpbmcgYSBjb2x1bW4gdG8gam9pbiBvbgogICAgICAgICAgICAgICAgbXV0YXRlKCdpZCcgPSBhcy5pbnRlZ2VyKEdlb0ZJUFMpLzEwMDApCgojIGNvbnZlcnQgUXVhcnRlcmx5IGRhdGEgdG8gbnVtZXJpYwpzdGF0ZV9nZHBbLCBncmVwbCggIlEiICwgbmFtZXMoIHN0YXRlX2dkcCApICkgXSA8LSBzdGF0ZV9nZHBbLCBncmVwbCggIlEiICwgbmFtZXMoIHN0YXRlX2dkcCApICkgXSAlPiUKICAgICAgICAgICAgICAgIGxhcHBseShmdW5jdGlvbih4KSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih4KSkpCmBgYAoKCmBgYCB7ciBtYXBfc2hhcGVmaWxlfQojIHBsb3QgdGhlIHNoYXBlcyB0byBlbnN1cmUgd2UgaGF2ZSB0aGVtCmxlYWZsZXQoc3RhdGVzKSAlPiUKICBhZGRUaWxlcygpICU+JQogIGFkZFBvbHlnb25zKCkgJT4lCiAgc2V0TWFwV2lkZ2V0U3R5bGUoKQpgYGAKCmBgYCB7ciBkYXRhX3dyYW5nbGluZ30KIyBmb3J0aWZ5IHRvIGNvbnZlcnQgaW50byBhIGRhdGFmcmFtZQpzdGF0ZV9tYXAgPC0gZm9ydGlmeShzdGF0ZXMsIHJlZ2lvbj0iU1RBVEVGUCIpICU+JQogICAgICAgICAgICAgICMgbWFrZSBpZCBjb2x1bW4gbnVtZXJpYyBpbiBvcmRlciB0byBqb2luCiAgICAgICAgICAgICAgbXV0YXRlKGlkID0gYXMuaW50ZWdlcihpZCkpCiMgam9pbiAidGhlbWF0aWMiIGRhdGEKZ2RwREYgPC0gZHBseXI6OmxlZnRfam9pbihzdGF0ZV9tYXAsIHN0YXRlX2dkcCwgYnkgPSBjKCJpZCIpKQoKCiNjaGFydG9ncmFtIHdyYW5nbGUKc2ZfTlBSMXRvMSA8LSBtdXRhdGUoc2ZfTlBSMXRvMSwgRklEID0gYXMuaW50ZWdlcihGSUQpKQpzZl9VU0dEUCA8LSBkcGx5cjo6bGVmdF9qb2luKHNmX05QUjF0bzEsIHN0YXRlX2dkcCwgYnkgPSBjKCJGSUQiPSJpZCIpKQpzZl9VU0dEUC5jZW50ZXJzIDwtIHNmX05QUjF0bzEuY2VudGVycwpzZl9VU0dEUCQnMjAxNlExJyA8LSBhcy5udW1lcmljKHNmX1VTR0RQJCcyMDE2UTEnKQoKYGBgCgpgYGB7ciBnZ19yZ2RwfQojIHBsb3R0aW5nCiMgZ2dwbG90KGdkcERGLCBhZXMobG9uZyxsYXQsIGdyb3VwPWlkLCBmaWxsPSAnMjAxNlExJykpICsgZ2VvbV9wb2x5Z29uKCkKCmdncGxvdChzdGF0ZV9nZHAsIGFlcyhtYXBfaWQ9aWQsZmlsbD0nMjAxNlExJykpICsKICBnZW9tX21hcChtYXA9c3RhdGVfbWFwLCBjb2xvcj0nI2ZmZmZmZicsIHNpemU9MC4xKSArCiAgZXhwYW5kX2xpbWl0cyh4PXN0YXRlX21hcCRsb25nLHk9c3RhdGVfbWFwJGxhdCkgKwogIHRoZW1lX21hcCgpCmBgYAoKCmBgYCB7ciBjaGFydG9ncmFtX3JkZ3B9CnFwYWwgPC0gY29sb3JCaW4oIkJsdWVzIiwgZG9tYWluID0gc2ZfVVNHRFAkJzIwMTZRMScsIGJpbnMgPSA4KQoKbGFiZWxzIDwtIHNwcmludGYoCiAgIjxzdHJvbmc+JXM8L3N0cm9uZz48YnIvPiVnIGRvbGxhcnMiLAogIHNmX1VTR0RQJHN0YXRlLCBzZl9VU0dEUCQnMjAxNlExJwopICU+JSBsYXBwbHkoaHRtbHRvb2xzOjpIVE1MKQoKbGVhZmxldCgKICBzZl9VU0dEUCwKICBvcHRpb25zPSBnZXRMZWFmbGV0T3B0aW9ucygtMS41LCAtMS41KSkgJT4lCiAgYWRkUG9seWdvbnMoCiAgICB3ZWlnaHQ9MiwKICAgIGZpbGxDb2xvcj0gfnFwYWwoJzIwMTZRMScpLAogICAgZ3JvdXAgPSAnc3RhdGVzJywKICAgIGZpbGxPcGFjaXR5ID0gMC42LCBvcGFjaXR5ID0gMSwgY29sb3I9IiM2NjY2NjYiLAogICAgaGlnaGxpZ2h0T3B0aW9ucyA9IGhpZ2hsaWdodE9wdGlvbnMod2VpZ2h0ID0gNCksCiAgICBsYWJlbCA9IGxhYmVscywKICAgIGxhYmVsT3B0aW9ucyA9IGxhYmVsT3B0aW9ucygKICAgICAgc3R5bGUgPSBsaXN0KCJmb250LXdlaWdodCIgPSAibm9ybWFsIiwgcGFkZGluZyA9ICIzcHggOHB4IiksCiAgICAgIHRleHRzaXplID0gIjE1cHgiLAogICAgICBkaXJlY3Rpb24gPSAiYXV0byIpKSAlPiUKICBhZGRMZWdlbmQocGFsID0gcXBhbCwgdmFsdWVzID0gficyMDE2UTEnLCBvcGFjaXR5ID0gMC43LCB0aXRsZSA9IE5VTEwsCiAgICBwb3NpdGlvbiA9ICJib3R0b21yaWdodCIpJT4lCiAgYWRkTGFiZWxPbmx5TWFya2VycygKICAgIGRhdGE9c2ZfVVNHRFAuY2VudGVycywKICAgIGxhYmVsID0gfmFzLmNoYXJhY3RlcihzdGF0ZSksCiAgICBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMoCiAgICBub0hpZGUgPSAnVCcsIHRleHRPbmx5ID0gVCwKICAgIG9mZnNldD1jKC00LC0xMCksIHRleHRzaXplID0gJzEycHgnKSkgJT4lCiAgc2V0TWFwV2lkZ2V0U3R5bGUoKQpgYGAKCgpgYGAge3IgbGVhZmxldF9yZ2RwfQpnZ3Bsb3Qoc3RhdGVfbWFwKSArCiAgZ2VvbV9zZihhZXMoKSkgKwogIHNjYWxlX2ZpbGxfdmlyaWRpcygpICsKICBnZ3RpdGxlKCJBcmVhIG9mIFN0YXRlcyIpCmBgYAoKIyMgRVhBTVBMRVMKYGBgIHtyIGRlbW99CiMgRnJvbSBodHRwOi8vbGVhZmxldGpzLmNvbS9leGFtcGxlcy9jaG9yb3BsZXRoL3VzLXN0YXRlcy5qcwpxcGFsIDwtIGNvbG9yUXVhbnRpbGUoIkJsdWVzIiwgZG9tYWluID0gc3RhdGVfZ2RwJCcyMDE2UTEnLCBuID0gNykKCmxlYWZsZXQoc3RhdGVzKSAlPiUKICBzZXRWaWV3KC05NiwgMzcuOCwgNCkgJT4lCiAgYWRkUG9seWdvbnMoCiAgICBjb2xvciA9IH5xcGFsKCcyMDE2UTEnKSwKICAgIG9wYWNpdHkgPSAxLAogICAgZGFzaEFycmF5ID0gIjMiLAogICAgZmlsbE9wYWNpdHkgPSAwLjcsCiAgICBzbW9vdGhGYWN0b3IgPSAwLjIsCiAgICBoaWdobGlnaHQgPSBoaWdobGlnaHRPcHRpb25zKAogICAgICB3ZWlnaHQgPSA1LAogICAgICBjb2xvciA9ICIjNjY2IiwKICAgICAgZGFzaEFycmF5ID0gIiIsCiAgICAgIGZpbGxPcGFjaXR5ID0gMC43LAogICAgICBicmluZ1RvRnJvbnQgPSBUUlVFKSwKICAgIGxhYmVsID0gbGFiZWxzLAogICAgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKAogICAgICBzdHlsZSA9IGxpc3QoImZvbnQtd2VpZ2h0IiA9ICJub3JtYWwiLCBwYWRkaW5nID0gIjNweCA4cHgiKSwKICAgICAgdGV4dHNpemUgPSAiMTVweCIsCiAgICAgIGRpcmVjdGlvbiA9ICJhdXRvIikpICU+JQogIGFkZExlZ2VuZChwYWwgPSBxcGFsLCB2YWx1ZXMgPSB+JzIwMTZRMScsIG9wYWNpdHkgPSAwLjcsIHRpdGxlID0gTlVMTCwKICAgIHBvc2l0aW9uID0gImJvdHRvbXJpZ2h0IikKYGBgCgpgYGAge3IgY2hhcnRvZ3JhbV9kZW1vfQpsZWFmbGV0KAogIHNmX05QUjF0bzEsCiAgb3B0aW9ucz0gZ2V0TGVhZmxldE9wdGlvbnMoLTEuNSwgLTEuNSkpICU+JQogIGFkZFBvbHlnb25zKAogICAgd2VpZ2h0PTIsY29sb3I9JyMwMDAwMDAnLCBncm91cCA9ICdzdGF0ZXMnLAogICAgZmlsbE9wYWNpdHkgPSAwLjYsIG9wYWNpdHkgPSAxLCBmaWxsQ29sb3I9IH5nZXRGYWN0b3JQYWwoc3RhdGUpKHN0YXRlKSwKICAgIGhpZ2hsaWdodE9wdGlvbnMgPSBoaWdobGlnaHRPcHRpb25zKHdlaWdodCA9IDQpKSAlPiUKICBhZGRMYWJlbE9ubHlNYXJrZXJzKAogICAgZGF0YT1zZl9OUFIxdG8xLmNlbnRlcnMsCiAgICBsYWJlbCA9IH5hcy5jaGFyYWN0ZXIoc3RhdGUpLAogICAgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKAogICAgbm9IaWRlID0gJ1QnLCB0ZXh0T25seSA9IFQsCiAgICBvZmZzZXQ9YygtNCwtMTApLCB0ZXh0c2l6ZSA9ICcxMnB4JykpICU+JQogIHNldE1hcFdpZGdldFN0eWxlKCkKYGBgCg==